package com.gzyj.web.api.yw;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gzyj.data.common.ResponseMsg;
import com.gzyj.data.web.yw.SbxxSearchParam;
import com.gzyj.jtt808.utils.IntUtils;
import com.gzyj.pojo.web.yw.AnbiaoTerminal;
import com.gzyj.web.mapper.yw.AnbiaoTerminalMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("api/yw/sbxx")
public class SbxxApi {

    @Autowired
    private AnbiaoTerminalMapper anbiaoTerminalMapper;

    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;

    @Value("${kafka.queue.down}")
    private String queueDown;

    @Autowired
    RedisTemplate<String, Object> clusterRedisTemplate;

    @Value("${redis.key.vehicle.cmdrs}")
    private String VehicleZdCMDRS;

    @PostMapping("getSbxx")
    public ResponseMsg<AnbiaoTerminal> getSbxx(SbxxSearchParam searchParam) {
        if (searchParam.getIsRefresh()) {
            JSONObject param = new JSONObject();
            param.put("cmdID", 0x8107);
            param.put("ipAddress", searchParam.getSimNo());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            param.put("sendTime", sdf.format(new Date()));
            kafkaTemplate.send(queueDown, JSON.toJSONString(param, SerializerFeature.DisableCircularReferenceDetect));
            return new ResponseMsg<>(200, "success");
        } else {
            AnbiaoTerminal anbiaoTerminal = anbiaoTerminalMapper.selectOne(new QueryWrapper<AnbiaoTerminal>().eq("vehId", searchParam.getVehId()));
            if(anbiaoTerminal!=null){
                String gnss = new StringBuffer(anbiaoTerminal.getGnssProp()).reverse().toString();
                if (gnss.charAt(0) == '1') {
                    anbiaoTerminal.setIsGPS(true);
                } else {
                    anbiaoTerminal.setIsGPS(false);
                }
                if (gnss.charAt(1) == '1') {
                    anbiaoTerminal.setIsBeidou(true);
                } else {
                    anbiaoTerminal.setIsBeidou(false);
                }

                if (gnss.charAt(2) == '1') {
                    anbiaoTerminal.setIsGLONASS(true);
                } else {
                    anbiaoTerminal.setIsGLONASS(false);
                }

                if (gnss.charAt(3) == '1') {
                    anbiaoTerminal.setIsGalileo(true);
                } else {
                    anbiaoTerminal.setIsGalileo(false);
                }

                String tx = new StringBuffer(anbiaoTerminal.getTxProp()).reverse().toString();
                if (tx.charAt(0) == '1') {
                    anbiaoTerminal.setIsGPRStx(true);
                } else {
                    anbiaoTerminal.setIsGPRStx(false);
                }
                if (tx.charAt(1) == '1') {
                    anbiaoTerminal.setIsCDMAtx(true);
                } else {
                    anbiaoTerminal.setIsCDMAtx(false);
                }

                if (tx.charAt(2) == '1') {
                    anbiaoTerminal.setIsTDSCDMAtx(true);
                } else {
                    anbiaoTerminal.setIsTDSCDMAtx(false);
                }

                if (tx.charAt(3) == '1') {
                    anbiaoTerminal.setIsWCDMAtx(true);
                } else {
                    anbiaoTerminal.setIsWCDMAtx(false);
                }

                if (tx.charAt(4) == '1') {
                    anbiaoTerminal.setIsCDMA2000tx(true);
                } else {
                    anbiaoTerminal.setIsCDMA2000tx(false);
                }

                if (tx.charAt(5) == '1') {
                    anbiaoTerminal.setIsTDLTEtx(true);
                } else {
                    anbiaoTerminal.setIsTDLTEtx(false);
                }

                if (tx.charAt(7) == '1') {
                    anbiaoTerminal.setIsQttx(true);
                } else {
                    anbiaoTerminal.setIsQttx(false);
                }


                String zdlx=new StringBuffer(IntUtils.intToBinary(Integer.valueOf(anbiaoTerminal.getTerminalType()),16)).reverse().toString();
                if (zdlx.charAt(0) == '1') {
                    anbiaoTerminal.setIsKycl(true);
                } else {
                    anbiaoTerminal.setIsKycl(false);
                }

                if (zdlx.charAt(1) == '1') {
                    anbiaoTerminal.setIsWxpcl(true);
                } else {
                    anbiaoTerminal.setIsWxpcl(false);
                }

                if (zdlx.charAt(2) == '1') {
                    anbiaoTerminal.setIsPthycl(true);
                } else {
                    anbiaoTerminal.setIsPthycl(false);
                }

                if (zdlx.charAt(3) == '1') {
                    anbiaoTerminal.setIsCzccl(true);
                } else {
                    anbiaoTerminal.setIsCzccl(false);
                }

                if (zdlx.charAt(6) == '1') {
                    anbiaoTerminal.setIsYplx(true);
                } else {
                    anbiaoTerminal.setIsYplx(false);
                }

                if (zdlx.charAt(7) == '1') {
                    anbiaoTerminal.setJx("分体机");
                } else {
                    anbiaoTerminal.setJx("一体机");
                }



                return new ResponseMsg<>(200, "success", anbiaoTerminal);
            }
            return new ResponseMsg<>(200, "success");
        }
    }

    @PostMapping("getSbxxZDRS")
    public ResponseMsg<Object> getSbxxZDRS(SbxxSearchParam searchParam) {
        Object obj = clusterRedisTemplate.opsForValue().get(VehicleZdCMDRS + searchParam.getSimNo() + ":" + 0x0107);

        if (obj != null) {

            AnbiaoTerminal anbiaoTerminal = anbiaoTerminalMapper.selectOne(new QueryWrapper<AnbiaoTerminal>().eq("vehId", searchParam.getVehId()));
            String gnss = new StringBuffer(anbiaoTerminal.getGnssProp()).reverse().toString();
            if (gnss.charAt(0) == '1') {
                anbiaoTerminal.setIsGPS(true);
            } else {
                anbiaoTerminal.setIsGPS(false);
            }
            if (gnss.charAt(1) == '1') {
                anbiaoTerminal.setIsBeidou(true);
            } else {
                anbiaoTerminal.setIsBeidou(false);
            }

            if (gnss.charAt(2) == '1') {
                anbiaoTerminal.setIsGLONASS(true);
            } else {
                anbiaoTerminal.setIsGLONASS(false);
            }

            if (gnss.charAt(3) == '1') {
                anbiaoTerminal.setIsGalileo(true);
            } else {
                anbiaoTerminal.setIsGalileo(false);
            }

            String tx = new StringBuffer(anbiaoTerminal.getTxProp()).reverse().toString();
            if (tx.charAt(0) == '1') {
                anbiaoTerminal.setIsGPRStx(true);
            } else {
                anbiaoTerminal.setIsGPRStx(false);
            }
            if (tx.charAt(1) == '1') {
                anbiaoTerminal.setIsCDMAtx(true);
            } else {
                anbiaoTerminal.setIsCDMAtx(false);
            }

            if (tx.charAt(2) == '1') {
                anbiaoTerminal.setIsTDSCDMAtx(true);
            } else {
                anbiaoTerminal.setIsTDSCDMAtx(false);
            }

            if (tx.charAt(3) == '1') {
                anbiaoTerminal.setIsWCDMAtx(true);
            } else {
                anbiaoTerminal.setIsWCDMAtx(false);
            }

            if (tx.charAt(4) == '1') {
                anbiaoTerminal.setIsCDMA2000tx(true);
            } else {
                anbiaoTerminal.setIsCDMA2000tx(false);
            }

            if (tx.charAt(5) == '1') {
                anbiaoTerminal.setIsTDLTEtx(true);
            } else {
                anbiaoTerminal.setIsTDLTEtx(false);
            }

            if (tx.charAt(7) == '1') {
                anbiaoTerminal.setIsQttx(true);
            } else {
                anbiaoTerminal.setIsQttx(false);
            }

            String zdlx=new StringBuffer(IntUtils.intToBinary(Integer.valueOf(anbiaoTerminal.getTerminalType()),16)).reverse().toString();
            if (zdlx.charAt(0) == '1') {
                anbiaoTerminal.setIsKycl(true);
            } else {
                anbiaoTerminal.setIsKycl(false);
            }

            if (zdlx.charAt(1) == '1') {
                anbiaoTerminal.setIsWxpcl(true);
            } else {
                anbiaoTerminal.setIsWxpcl(false);
            }

            if (zdlx.charAt(2) == '1') {
                anbiaoTerminal.setIsPthycl(true);
            } else {
                anbiaoTerminal.setIsPthycl(false);
            }

            if (zdlx.charAt(3) == '1') {
                anbiaoTerminal.setIsCzccl(true);
            } else {
                anbiaoTerminal.setIsCzccl(false);
            }

            if (zdlx.charAt(6) == '1') {
                anbiaoTerminal.setIsYplx(true);
            } else {
                anbiaoTerminal.setIsYplx(false);
            }

            if (zdlx.charAt(7) == '1') {
                anbiaoTerminal.setJx("分体机");
            } else {
                anbiaoTerminal.setJx("一体机");
            }

            return new ResponseMsg<>(200, "success", anbiaoTerminal);
        }

        return new ResponseMsg<>(201, "终端未响应");
    }


}
